package sale.wxb.loveshopping;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.TemplateType;
import org.springframework.stereotype.Component;

import java.util.Collections;

//@Component
public class MyBatisGenerate {

    public static void main(String[] args) {
        String url = "jdbc:mysql://centos.wxb.sale:7036/love_shopping?serverTimezone=Asia/Shanghai";
        String username = "admin";
        String password = "wangxiaobaoB123!";
        String projectPath = System.getProperty("user.dir");
        FastAutoGenerator.create(url, username, password)
                // 全局配置
                .globalConfig(builder -> {
                    builder.author("王小宝") // 设置作者
                            .disableOpenDir()
                            .enableSwagger() // 开启 swagger 模式
                            .outputDir(projectPath + "/lsp-common/src/main/java"); // 指定输出目录
                })
                // 包配置
                .packageConfig(builder -> {
                    builder.parent("sale.wxb.loveshopping") // 设置父包名
                            // 设置父包模块名 先不用这个了 除实体外其他文件不会覆盖更新了 直接可以使用
                            // .moduleName("lsp-common")
                            .service("service")
                            .serviceImpl("service.impl")
                            .mapper("dao")
                            .entity("entity.model")
                            // 设置mapperXml生成路径
                            .pathInfo(Collections.singletonMap(OutputFile.xml, projectPath + "/lsp-common/src/main/resources/mappers" ));
                })
                // 策略配置
                .strategyConfig(builder -> {
                    builder.addExclude(Collections.singletonList("t_example"));
                    // 设置mapper
                    builder.mapperBuilder()
                            .convertXmlFileName(entityName -> entityName + "Mapper")
                            .convertMapperFileName(entityName -> entityName + "Dao");
                    // 设置实体类
                    builder.entityBuilder()
                            .enableLombok()
                            // 设置每次生成覆盖实体 3.5.3新增
                            .enableFileOverride()
                            // 设置父类
                            // .superClass(BaseEntity.class)
                            .superClass("sale.wxb.loveshopping.entity.common.BaseEntity")
                            // 设置忽略字段 以下字段使用继承父类的方式处理
                            .addIgnoreColumns("id", "create_time", "create_user", "update_time", "update_user", "is_delete", "version")
                    ;
                })
                // 模板配置
                .templateConfig(builder -> {
                    builder
                            .disable(TemplateType.ENTITY, TemplateType.SERVICE_IMPL)
                            .mapper("templates/mapper.java.vm")
                            .serviceImpl("templates/serviceImpl.java.vm")
                            .entity("templates/entity.java.vm");
                    // 不生成控制器
                    builder.controller("");
                })
                .execute();

    }
}
